<?php

namespace textreader;

class TextReader
{
    public function readTxtFile($filePath)
    {
        // 检查文件是否存在，如果是远程文件，这里仅检查 URL 是否有效
        if (!filter_var($filePath, FILTER_VALIDATE_URL) && !file_exists($filePath)) {
            return "找不到指定的文件";
        }
    
        // 打开文件
        $handle = fopen($filePath, "r");
        if ($handle) {
            $tree = [];
            $currentChapter = null;
            $currentSection = null;
            while (($line = fgets($handle)) !== false) {
                $line = rtrim($line, "\r\n");
                // 正则表达式匹配章节标题
                if (preg_match('/###(第[一二三四五六七八九十百千万零]+[章回卷])\s*(.*?)###/u', $line, $matches)) {
                    // 如果已经存在当前章节，将其添加到树中
                    if ($currentChapter !== null) {
                        // 如果当前章节有节，也添加到树中
                        if ($currentSection !== null) {
                            $currentChapter['sections'][] = $currentSection;
                        }
                        // 将当前章节添加到树中
                        $tree[] = $currentChapter;
                    }
                    // 创建新章节
                    $currentChapter = [
                        'chapter_number' => $matches[1],
                        'chapter_title' => $matches[2],
                        'sections' => []
                    ];
                    $currentSection = null; // 重置当前节
                } 
                // 正则表达式匹配节标题
                elseif (preg_match('/###(第[一二三四五六七八九十百千万零]+节)\s*(.*?)###/u', $line, $matches) && $currentChapter !== null) {
                    // 如果已经存在当前节，将其保存到当前章节中
                    if ($currentSection !== null) {
                        $currentChapter['sections'][] = $currentSection;
                    }
                    // 创建新节
                    $currentSection = [
                        'section_number' => $matches[1],
                        'section_title' => $matches[2],
                        'content' => ''
                    ];
                } else {
                    // 如果我们处于节的上下文中，则将文本添加到节的内容中
                    if ($currentSection !== null) {
                        $currentSection['content'] .= $line . "\n";
                    }
                }
            }
            // 文件末尾，确保最后一个章节和节被添加到树中
            if ($currentChapter !== null) {
                if ($currentSection !== null) {
                    $currentChapter['sections'][] = $currentSection;
                }
                $tree[] = $currentChapter;
            }
            
            // 关闭文件句柄
            fclose($handle);
            // 使用dd()函数来打印调试信息并中断脚本执行
            return $tree;
        } else {
            echo "无法打开文件";
        }
    }
}